#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
#include<stdbool.h>

// Definition for singly - linked list.
// /*struct ListNode {
//    int val;
//    struct ListNode* next;
//    
//};
//typedef struct ListNode ListNode;
//struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB) {
//    ListNode* pheadA = headA;
//    ListNode* pheadB = headB;
//    int numA = 0;
//    int numB = 0;
//    while (pheadA)
//    {
//        pheadA = pheadA->next;
//        numA++;
//    }
//    while (pheadB)
//    {
//        pheadB = pheadB->next;
//        numB++;
//    }
//    int list = ABS(numA, numB);
//    ListNode* long = headB;
//    ListNode* short = headA;
//    if (numA > numB)
//    {
//        long = headA;
//        short = headB;
//    }
//    while (list--)
//    {
//        long = long->next;
//    }
//    while (long)
//    {
//        if (long == short)
//        {
//            return long;
//        }
//        long = long->next;
//        short = short->next;
//    }
//    return NULL;
//
//}
//int main()
//{
//    getIntersectionNode();
//	return 0;
//}*/
//注意上面犯了一个错误，变量名不能用关键词

//Definition for singly-linked list.
//  /*struct ListNode {
//      int val;
//      struct ListNode *next;
//  };
//typedef struct ListNode ListNode;
//struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB) {
//    ListNode* pheadA = headA;
//    ListNode* pheadB = headB;
//    int numA = 0;
//    int numB = 0;
//    while (pheadA)
//    {
//        pheadA = pheadA->next;
//        numA++;
//    }
//    while (pheadB)
//    {
//        pheadB = pheadB->next;
//        numB++;
//    }
//    int gap = abs(numA - numB);
//    ListNode* longlist = headB;
//    ListNode* shortlist = headA;
//    if (numA > numB)
//    {
//        longlist = headA;
//        shortlist = headB;
//    }
//    while (gap--)
//    {
//        longlist = longlist->next;
//    }
//    while (longlist)
//    {
//        if (longlist == shortlist)
//        {
//            return longlist;
//        }
//        longlist = longlist->next;
//        shortlist = shortlist->next;
//    }
//
//    return NULL;
//
//}
//int main()
//{
//    getIntersectionNode();
//
//    return 0;
//}*/
//判断是否有环形链表
// 以下代码时间超时，由自己实现，未通过要求
// Definition for singly-linked list.
struct ListNode {
     int val;
     struct ListNode *next;
};
//typedef struct ListNode ListNode;
//bool hasCycle(struct ListNode* head) {
//    if (head == NULL)
//    {
//        return false;
//    }
//    ListNode* slow = head;
//    ListNode* fast = head;
//    while (fast)
//    {
//        slow = slow->next;
//        if (fast->next == NULL)
//        {
//            fast = fast->next->next;
//        }
//        if (slow == fast)
//        {
//            return true;
//        }
//    }
//    return false;
//}
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
//以下是正确代码
//关键在于判断条件刚刚理解出错
//typedef struct ListNode ListNode;
//bool hasCycle(struct ListNode* head) {
//    if (head == NULL)
//    {
//        return false;
//    }
//    ListNode* slow = head;
//    ListNode* fast = head;
//    while (fast && fast->next)
//    {
//        slow = slow->next;
//        fast = fast->next->next;
//        if (slow == fast)
//        {
//            return true;
//        }
//    }
//    return false;
//
//
//}
typedef int LTDatatype;
typedef struct listNode
{
    LTDatatype data;
    struct listNode* prev;
    struct listNode* next;
}listNode;

void test01()
{
    listNode* head = (listNode*)malloc(sizeof(listNode));
    head->prev = head;
    head->next = head;
    head->data = -1;
}


int main()
{
    test01();
}